#include <iostream>
#include <string>   // C++字符串
#include <cstdint>  // 固定宽度整数类型

int main() {
    // ===== 基础类型对应关系 =====
    
    // 布尔类型（1字节）
    // Java对应: boolean (实际JVM中用1字节存储)
    bool cppBool = true;
    
    // 字符类型（1字节，有符号）
    // Java对应: byte (但Java的char是16位无符号)
    char cppChar = 'A';
    
    // 宽字符（2或4字节，平台相关）
    // Java对应: char (固定2字节无符号)
    wchar_t cppWideChar = L'中';
    
    // 短整型（2字节，有符号）
    // Java对应: short (完全对应)
    short cppShort = 32767;
    
    // 整型（通常4字节，有符号）
    // Java对应: int (完全对应)
    int cppInt = 2147483647;
    
    // 长整型（4或8字节，平台相关）
    // Java对应: int (如果cpp long是4字节) 或 long (如果cpp long是8字节)
    long cppLong = 2147483647L;
    
    // 长长整型（8字节，有符号）
    // Java对应: long (完全对应)
    long long cppLongLong = 9223372036854775807LL;
    
    // 单精度浮点（4字节）
    // Java对应: float (完全对应)
    float cppFloat = 3.14f;
    
    // 双精度浮点（8字节）
    // Java对应: double (完全对应)
    double cppDouble = 3.1415926535;
    
    // ===== 无符号类型（Java没有直接对应类型）=====
    unsigned char cppUChar = 255;    // Java可用: short 替代
    unsigned int cppUInt = 4294967295U; // Java需用: long 替代
    
    // ===== 固定宽度类型（C++11）=====
    // Java对应: 通过基本类型包装类实现（如java.lang.Integer）
    int32_t fixed32 = 100;      // Java: int
    uint64_t fixed64 = 100ULL;  // Java: long
    
    // ===== 字符串类型 =====
    // Java对应: String (但C++字符串可变，Java字符串不可变)
    std::string cppStr = "Hello"; 
    
    // ===== 数组类型 =====
    // Java对应: 数组声明语法不同
    int cppArray[5] = {1,2,3,4,5}; // Java: int[] javaArray = {1,2,3,4,5};
    
    // ===== 输出验证 =====
    std::cout << "=== 类型大小验证 ===" << std::endl;
    std::cout << "bool:       " << sizeof(cppBool) << " bytes" << std::endl;
    std::cout << "char:       " << sizeof(cppChar) << " bytes" << std::endl;
    std::cout << "wchar_t:    " << sizeof(cppWideChar) << " bytes" << std::endl;
    std::cout << "long:       " << sizeof(cppLong) << " bytes" << std::endl;
    
    return 0;
}